﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using RESTServices.Dominio;
using System.Data.SqlClient;

namespace RESTServices.Persistencia
{
    public class SalaRecursoDAO
    {
        public SalaRecurso Crear(string acodigo)
        {
            String[] Codigos = acodigo.Split(new []{'x'});
            int codigoultimo=0;
            SalaRecurso salarecursoCreada = null;
            string sql = "INSERT INTO salarec VALUES(@codrecurso,@codsala)";
            using (SqlConnection con = new SqlConnection(Conexion.ObtenerCadena))
            {
                con.Open();
                using (SqlCommand com = new SqlCommand(sql, con))
                {
                    com.Parameters.Add(new SqlParameter("@codrecurso", int.Parse(Codigos[0])));
                    com.Parameters.Add(new SqlParameter("@codsala", int.Parse(Codigos[1])));
                    com.ExecuteNonQuery();
                }

                sql = "select max(id_salarec) id_salarec from salarec";
                using (SqlCommand com = new SqlCommand(sql, con))
                {
                    SqlDataReader resultado = com.ExecuteReader();
                    if (resultado.Read())
                    {
                        codigoultimo = (int)resultado["id_salarec"];
                    }
                }
            }

            salarecursoCreada = Obtener(codigoultimo);
            return salarecursoCreada;
        }

        public SalaRecurso Obtener(int codigo)
        {
            SalaRecurso salarecursoEncontrada = null;
            string sql = "select s.id_salarec, r.id_recurso, s.id_sala, nombre from salarec s inner join recurso r on r.id_recurso=s.id_recurso where id_salarec=@cod";
            using (SqlConnection con = new SqlConnection(Conexion.ObtenerCadena))
            {
                con.Open();
                using (SqlCommand com = new SqlCommand(sql, con))
                {
                    com.Parameters.Add(new SqlParameter("@cod", codigo));
                    using (SqlDataReader resultado = com.ExecuteReader())
                    {
                        if (resultado.Read())
                        {
                            salarecursoEncontrada = new SalaRecurso()
                            {
                                Codigo = (int)resultado["id_salarec"],
                                CodigoRecurso = (int)resultado["id_recurso"],
                                CodigoSala = (int)resultado["id_sala"],
                            };
                        }
                    }
                }

            }
            return salarecursoEncontrada;
        }
        
        public bool Eliminar(int codigo)
        {
            try{
                string sql = "DELETE from salarec where id_salarec=@cod";            
                using (SqlConnection con = new SqlConnection(Conexion.ObtenerCadena))
                {
                    con.Open();
                    using (SqlCommand com = new SqlCommand(sql, con))
                    {
                        com.Parameters.Add(new SqlParameter("@cod", codigo));
                        com.ExecuteNonQuery();
                    }
                }
             return true;  
            }catch(Exception e){
             return false;
            }
        }

        public List<SalaRecurso> ListarTodos(int codigo)
        {
            List<SalaRecurso> salasRecursosEncontradas = new List<SalaRecurso>();
            SalaRecurso salaEncontrada = null;
            string sql = "SELECT s.id_salarec, r.id_recurso, nombre, s.id_sala  FROM salarec s inner join recurso r on r.id_recurso=s.id_recurso where s.id_sala=@cod order by r.id_recurso";
            using (SqlConnection con = new SqlConnection(Conexion.ObtenerCadena))
            {
                con.Open();
                using (SqlCommand com = new SqlCommand(sql, con))
                {
                    com.Parameters.Add(new SqlParameter("@cod", codigo));
                    using (SqlDataReader resultado = com.ExecuteReader())
                    {
                        while (resultado.Read())
                        {
                            salaEncontrada = new SalaRecurso()
                            {
                                Codigo = (int)resultado["id_salarec"],
                                CodigoRecurso = (int)resultado["id_recurso"],
                                CodigoSala = (int)resultado["id_sala"],
                                Nombre = (string)resultado["nombre"]
                            };
                            salasRecursosEncontradas.Add(salaEncontrada);
                        }
                    }
                }
            }
            return salasRecursosEncontradas;
        }

        public List<SalaRecurso> ListarSalas()
        {
            List<SalaRecurso> salasRecursosEncontradas = new List<SalaRecurso>();
            SalaRecurso salaEncontrada = null;
            string sql = "SELECT id_sala, nombre FROM sala";
            using (SqlConnection con = new SqlConnection(Conexion.ObtenerCadena))
            {
                con.Open();
                using (SqlCommand com = new SqlCommand(sql, con))
                {
                    using (SqlDataReader resultado = com.ExecuteReader())
                    {
                        while (resultado.Read())
                        {
                            salaEncontrada = new SalaRecurso()
                            {
                                CodigoSala = (int)resultado["id_sala"],
                                NombreSala = (string)resultado["nombre"]
                            };
                            salasRecursosEncontradas.Add(salaEncontrada);
                        }
                    }
                }
            }
            return salasRecursosEncontradas;
        }

        public List<SalaRecurso> ListarRecursos(int codigo)
        {
            List<SalaRecurso> salasRecursosEncontradas = new List<SalaRecurso>();
            SalaRecurso salaEncontrada = null;
            string sql = "select id_recurso, nombre from recurso where id_recurso not in (select id_recurso from salarec where id_sala=@cod)";
            using (SqlConnection con = new SqlConnection(Conexion.ObtenerCadena))
            {
                con.Open();
                using (SqlCommand com = new SqlCommand(sql, con))
                {
                    com.Parameters.Add(new SqlParameter("@cod", codigo));
                    using (SqlDataReader resultado = com.ExecuteReader())
                    {
                        while (resultado.Read())
                        {
                            salaEncontrada = new SalaRecurso()
                            {
                                CodigoRecurso = (int)resultado["id_recurso"],
                                Nombre = (string)resultado["nombre"],
                                CodigoSala = codigo
                            };
                            salasRecursosEncontradas.Add(salaEncontrada);
                        }
                    }
                }
            }
            return salasRecursosEncontradas;
        }

    }
}